package com.countantProject.util;

import java.util.*;

/**
 * @author Lenl
 * @create 2021-05-29 11:45
 * 将不同功能封装为方法
 */
public class CMUtility {
    private static Scanner scanner=new Scanner(System.in);
    /**
     *用于界面菜单选择，读取键盘，‘1’-‘5’则方法返回
     */
    public static char readMenuSelection(){
        char c;
        for (;;){
            String str =readKeyBoard(1,false);
            c=str.charAt(0);
            if(c!='1'&&c!='2'&&c!='3'&&c!='4'&&c!='5'){
                System.out.print("选择错误，请重新输入:");
            }else break;
        }
        return c;
    }

    /**
     * 从键盘读取一个字符
     * @return 键盘读取的字符
     */
    public static char readChar(){
        String str=readKeyBoard(1,false);
        return str.charAt(0);
    }

    /**
     * 从键盘读取字符，若直接enter则以defaultValue作为返回值
     * @param defaultValue 默认的返回值
     * @return 键盘读取的字符
     */
    public static char readChar(char defaultValue){
        String str=readKeyBoard(1,true);
        return (str.length()==0)?defaultValue:str.charAt(0);
    }

    /**
     * 从键盘读取不超过两位的整数
     * @return 键盘上不超过2位的整数
     */
    public  static int readInt(){
        int n;
        for (;;){
            String str=readKeyBoard(2,false);
            try{
                n=Integer.parseInt(str);
                break;
            }catch (NumberFormatException e){
                System.out.print("数字输入错误，请重新输入：");
            }
        }
        return n;
    }

    /**
     * 从键盘读取不超过2位的数字，若直接enter则返回默认值
     * @param defaultValue 默认返回值
     * @return 返回的读取数值
     */
    public static int readInt(int defaultValue){
        int n;
        for (;;){
            String str=readKeyBoard(2,true);
            if(str.equals("")){
                return defaultValue;
            }
            try{
                n=Integer.parseInt(str);
                break;
            }catch (NumberFormatException e){
                System.out.print("数字输入错误，请重新输入：");
            }
        }
        return n;
    }

    /**
     * 从键盘读取一个限制长度的字符串
     * @param limit 字符串长度限制
     * @return
     */
    public static String readString(int limit){
        return readKeyBoard(limit,false);
    }

    public static String readString(int limit ,String defaultValue){
        String str=readKeyBoard(limit,true);
        return  str.equals("")?defaultValue:str;
    }

    /**
     * 读取用于选择的输入
     * @return Y或N
     */
    public  static char readConfirmSelection(){
        char c;
        for (;;){
            String str=readKeyBoard(1,false).toUpperCase();
            c=str.charAt(0);
            if(c=='Y'||c=='N'){
                break;
            }else{
                System.out.print("选择错误，请重新输入：");
            }
        }
        return  c;
    }

    private static String readKeyBoard(int limit,boolean blankReturn){
        String line="";
        while(scanner.hasNextLine()){
            line=scanner.nextLine();
            if(line.length()==0){
                if(blankReturn) return line;
                else continue;
            }

            if(line.length()<1||line.length()>limit){
                System.out.print("输入长度(不大于"+limit+")错误，请重新输入：");
                continue;
            }
            break;
        }
        return  line;
    }
}
